/*
 *	@file	scr_mushitori.c
 *	@brief	虫取り大会フィールドオーバーレイスクリプトコマンド
 *	@author	Miyuki Iwasawa
 *	@date	09.03.04
 */

#include "common.h"

#include "fieldsys.h"

#include "system/pm_overlay.h"
#include "system/mystatus.h"
#include "poketool/poke_tool.h"

#include "field_subproc.h"
#include "field/field.h"
#include "field/situation_local.h"
#include "field/script.h"
#include "field/syswork.h"
#include "field/fld_bgm.h"
#include "fieldmap.h"
#include "map_attr.h"
#include "zonedata.h"
#include "map_tool.h"
#include "scr_tool.h"
#include "scrcmd_def.h"

#include "fielddata/maptable/zone_id.h"
#include "fld_mushitori.h"
#include "scr_mushitori.h"

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会初期化/解放
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 * @li field_mushitoriオーバーレイを明示的にロードした状態でないと使えません
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriSysControl( VM_MACHINE * core )
{
	u8 mode = VMGetU8(core);
	u16	week = VMGetWorkValue(core);

	FIELDSYS_WORK* fsys = core->fsys;

	if(mode == 0){
		fsys->mushitori_wk = MushitoriSys_Init(fsys,week);
	}else{
		MushitoriSys_End(fsys->mushitori_wk);
		fsys->mushitori_wk = NULL;

		//マサキのボックスいっぱい電話予約チェック
		FldPMTel_EvCheckMasakiBoxFull(fsys);
	}
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会 指定順位のパラメータをバッファ展開
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 *
 * @li field_mushitoriオーバーレイを明示的にロードした状態でないと使えません
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriRankingDataBufSet( VM_MACHINE * core )
{
    WORDSET** wordset	= GetEvScriptWorkMemberAdrs( core->fsys, ID_EVSCR_WORDSET );
	FLD_MUSHITORI_WORK* wk = MushitoriSysSt_GetWorkPointer(core->fsys);
	u8	rank = VMGetU8(core);

	MushitoriSys_RankingDataBufSet(wk,core->msgman,*wordset,rank);
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会　順位評価して、自分の順位ともらえる賞品、捕まえたモンスターナンバーを取得
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 *
 * @li field_mushitoriオーバーレイを明示的にロードした状態でないと使えません
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriGetMyResult( VM_MACHINE * core )
{
	FLD_MUSHITORI_WORK* wk = MushitoriSysSt_GetWorkPointer(core->fsys);
	u16* rank_wk = VMGetWork(core);
	u16* item_wk = VMGetWork(core);
	u16* mons_wk = VMGetWork(core);

	//順位評価
	MushitoriSys_Rating(wk);

	*rank_wk = wk->my_rank;
	*item_wk = wk->item;

	if(!wk->get_f){
		*mons_wk = 0;
	}else{
		*mons_wk = PokeParaGet(wk->fld_pp,ID_PARA_monsno,NULL);
	}
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会 捕まえたポケモンを手持ちorボックスに追加
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 *
 * @li field_mushitoriオーバーレイを明示的にロードした状態でないと使えません
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriCapturePokeGet( VM_MACHINE * core )
{
    WORDSET** wordset	= GetEvScriptWorkMemberAdrs( core->fsys, ID_EVSCR_WORDSET );
	FLD_MUSHITORI_WORK* wk = MushitoriSysSt_GetWorkPointer(core->fsys);
	u8	buf_id = VMGetU8(core);
	u16* ret_wk = VMGetWork(core);

	*ret_wk = MushitoriSys_CapturePokePush(wk,*wordset,buf_id);
	return 0;
}


//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会 残り時間をバッファにセット
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 *
 * @li	mushitoriオーバーレイ無しで利用可
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriRestTimeSet( VM_MACHINE * core )
{
    WORDSET** wordset		= GetEvScriptWorkMemberAdrs( core->fsys, ID_EVSCR_WORDSET );
	u8 buf_id = VMGetU8(core);
	u32	rest = 1;

	FLD_MUSHITORI_WORK* wk = MushitoriSysSt_GetWorkPointer(core->fsys);

	if(wk != NULL && wk->time < MUSHITORI_TIME_MAX){
		rest = MUSHITORI_TIME_MAX-wk->time;
	}
	WORDSET_RegisterNumber( *wordset, buf_id, rest, 2, NUMBER_DISPTYPE_LEFT, NUMBER_CODETYPE_DEFAULT );
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会 指定したエントリーナンバーのトレーナーがエントリーしているか？
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 *
 * @li	mushitoriオーバーレイ無しで利用可
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdMushitoriTrainerEntryCheck( VM_MACHINE * core )
{
	FLD_MUSHITORI_WORK* wk = MushitoriSysSt_GetWorkPointer(core->fsys);
	u16  entry_id = VMGetWorkValue(core);
	u16* ret_wk = VMGetWork(core);

	*ret_wk = MushitoriSys_TrainerEntryCheck(wk,entry_id);

	return 0;
}






